#include <stdio.h>
#include <stdlib.h>

// 一维数组的数组名是一级指针；
// 二维数组的数组名是数组指针。

// & reference
// * dereference
int main()
{
#if 0
// 一维数组
    int arr[4] = {1,2,3,4};
    printf("arr = %p\n",arr);                       // 起始地址
    printf("&arr[0] = %p\n",&arr[0]);
    printf("arr = %p    arr+1 = %p\n",arr,arr+1);   // 步长
    for(int i = 0; i < sizeof (arr)/sizeof (int); i++)  // 范围
    {
        printf("%d\n",arr[i]);
    }
#endif

    // 二维数组
    int arr[3][4];  // int[4] arr[3]; T arr[3];
    printf("arr = %p\n", arr);                   // 起始地址
    printf("&arr[0] = %p\n", &arr[0]);
    printf("arr = %p    arr+1 = %p\n", arr,arr+1);   // 步长

    printf("arr[0] = %p\n", arr[0]);     // 内嵌一维数组起始地址
    printf("&arr[0][0] = %p\n", &arr[0][0]);
    printf("arr[0] = %p    arr[0]+1 = %p\n", arr[0],arr[0]+1);   // 内嵌一维数组步长


    for(int i = 0; i < 3; i ++)
    {   for(int j = 0; j < 4; j++)
        {
            arr[i][j] = rand()%100;
        }
        putchar(10);
    }
    for(int i = 0; i < 3; i ++)
    {   for(int j = 0; j < 4; j++)
        {
            arr[i][j] = rand()%100;
            printf("%3d", arr[i][j]);
        }
        putchar(10);
    }
    //printf("Hello World!\n");
    return 0;
}
